{
    function foo() {
        console.log(this.a)
    }
    var a = 1
    foo()

    var obj = {
        a: 2,
        foo: foo
    }
    obj.foo()

// 以上两者情况 `this` 只依赖于调用函数前的对象，优先级是第二个情况大于第一个情况

// 以下情况是优先级最高的，`this` 只会绑定在 `c` 上，不会被任何方式修改 `this` 指向
    var c = new foo()
    c.a = 3
    console.log(c.a)
}

{
    var foo = 1;
    // 立即执行函数
    (function foo() {
        foo = 10
        console.log(foo)
    }())
}
